package com.zaimokuza.cn.service;

import com.zaimokuza.cn.entity.PageResult;
import com.zaimokuza.cn.entity.message.AlertMessage;
import com.zaimokuza.cn.entity.message.Message;
import com.zaimokuza.cn.entity.message.vo.MessageInfo;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author zaimokuza
 */
public interface MessageService {

    /**
     * 发送新消息
     *
     * @param message 消息内容
     */
    void send(Message message);

    /**
     * 举报用户
     *
     * @param alertMessage 举报内容
     */
    void alert(AlertMessage alertMessage);

    /**
     * 处理用户举报
     *
     * @param alertMessage 举报内容
     */
    void handleAlert(AlertMessage alertMessage);

    /**
     * 修改用户和指定联络人的所有接收消息状态
     *
     * @param userId   用户ID
     * @param friendId 联络人ID
     */
    void updateMessageStatus(String userId, String friendId);

    /**
     * 根据用户和联络人查询私信信息
     *
     * @param userId   用户ID
     * @param friendId 联络人ID
     * @param page     当前页
     * @param size     每页条数
     * @return 私信分页集合
     */
    PageResult<MessageInfo> getMessagePage(String userId, String friendId, Integer page, Integer size);

    /**
     * 查询分页的举报信息列表
     *
     * @param isHandle 是否处理
     * @param page     当前页
     * @param size     每页数量
     * @return 分页的举报信息列表
     */
    PageResult<AlertMessage> getAlterMessagePage(Boolean isHandle, Integer page, Integer size);


    /**
     * 根据用户ID和联络人ID集合获取联络人未读信息数量
     *
     * @param userId            用户ID
     * @param contactUserIdList 联络人ID集合
     * @return 联络人未读信息数量
     */
    HashMap<String, Long> getContactUserUnreadNumber(String userId, ArrayList<String> contactUserIdList);

}
